package com.example.d5_tcp2;

import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * TCP通信多发多收 服务端
 */
public class Server {
    public static void main(String[] args) throws IOException {
        System.out.println("服务端启动...");
        /**
         * 1.创建ServerSocket对象，并注册服务端端口号
         */
        ServerSocket serverSocket = new ServerSocket(8888);

        /**
         * 2.使用serverSocket对象，调用accept方法，等待客户端的连接请求，并返回一个Socket对象
         */
        Socket socket = serverSocket.accept();

        /**
         * 3.从socket通信管道中得到一个字节输入流，读取客户端发送的数据
         */
        InputStream inputStream = socket.getInputStream();

        /**
         * 4.将低级的字节输入流包装成高级的数据输入流
         */
        DataInputStream dataInputStream = new DataInputStream(inputStream);

        while (true) {
            try {
                /**
                 * 5.读取客户端发送的数据
                 */
                String data = dataInputStream.readUTF();
                System.out.println("服务端接收的数据：" + data);
                System.out.println("=============================");
            } catch (Exception e) {
                System.out.println(socket.getRemoteSocketAddress() + "离线了");
                /**
                 * 6.释放资源
                 */
                dataInputStream.close();
                socket.close();
                serverSocket.close();
                break;
            }
        }

        /**
         * 数据流动方向：serverSocket -> socket -> inputStream -> dataInputStream
         */
    }
}
